home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 18 / CU Amiga Magazine's Super CD-ROM 18 (1997)(EMAP Images)(GB)[!][issue 1998-01].iso / CUCD / Programming / AmigaE / Src / Tools / TrapGuru / trapguru.e < prev   
Text File  |  1992-09-02  |  783b  |  46 lines

  1. /* trapguru.m
  2.  
  3.    installs a trap-handler in your task-structure, to catch
  4.    processor exceptions like zero-divide etc.
  5.    When handler gets invoked, it will throw an E-exception
  6.    "GURU" with alertnum as info.
  7.  
  8.    I don't guarantee this is 100% reliable for all CPU's etc.
  9.  
  10. */
  11.  
  12.  
  13. OPT MODULE
  14.  
  15. MODULE 'exec/tasks'
  16.  
  17. EXPORT PROC trapguru()
  18.   DEF mytask:PTR TO tc
  19.   mytask:=FindTask(NIL)
  20.   mytask.trapcode:={tcode}
  21.   LEA store(PC),A0
  22.   MOVE.L A4,(A0)
  23. ENDPROC
  24.  
  25. tcode:
  26.   MOVE.L (A7)+,D0
  27.   LEA store(PC),A0
  28.   MOVE.L D0,4(A0)
  29.   MOVEQ #3,D1
  30.   CMP.L D1,D0
  31.   BGT.S noadjust
  32.   MOVE.L $4.W,A6
  33.   BTST #0,297(A6)
  34.   BNE.S noadjust
  35.   ADDQ.L #8,A7
  36. noadjust:
  37.   LEA continue(PC),A0
  38.   MOVE.L A0,2(A7)
  39.   RTE
  40. continue:
  41.   LEA store(PC),A0
  42.   MOVE.L (A0),A4
  43.   Throw("GURU",Long({store}+4))
  44. store:
  45.   LONG 0,0
  46.